home *** CD-ROM | disk | FTP | other *** search
/ Interactive CD-ROM & Web Magazine 6 / Interactive CD-ROM & Web Magazine 6.iso / pc / tms / drivers / setupapi.in_ < prev    next >
Encoding:
Text File  |  1995-07-10  |  55.1 KB  |  1,825 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK                = 0
  23. CONST MB_OKCANCEL          = 1
  24. CONST MB_ABORTRETRYIGNORE  = 2
  25. CONST MB_YESNOCANCEL       = 3
  26. CONST MB_YESNO             = 4
  27. CONST MB_RETRYCANCEL       = 5
  28. CONST MB_ICONHAND          = 16
  29. CONST MB_ICONQUESTION      = 32
  30. CONST MB_ICONEXCLAMATION   = 48
  31. CONST MB_ICONASTERISK      = 64
  32. CONST MB_ICONINFORMATION   = 64
  33. CONST MB_ICONSTOP          = 16
  34. CONST MB_DEFBUTTON1        = 0
  35. CONST MB_DEFBUTTON2        = 256
  36. CONST MB_DEFBUTTON3        = 512
  37. CONST MB_APPLMODAL         = 0
  38. CONST MB_SYSTEMMODAL       = 4096
  39. CONST MB_TASKMODAL         = 8192
  40.  
  41. const IDOK               = 1
  42. const IDYES            = 6
  43.  
  44. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  45. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  46. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  47. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  48. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  49. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  50. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  51.  
  52.  
  53.  
  54.  
  55. '**************************************************************************
  56. '****************************** Setup Constants ***************************
  57. '**************************************************************************
  58.  
  59.  
  60. ''Command Option Flags
  61.  
  62. CONST cmoVital       = 1
  63. CONST cmoCopy        = 2
  64. CONST cmoUndo        = 4
  65. CONST cmoRoot        = 8
  66. CONST cmoDecompress  = 16
  67. CONST cmoTimeStamp   = 32
  68. CONST cmoReadOnly    = 64
  69. CONST cmoBackup      = 128
  70. CONST cmoForce       = 256
  71. CONST cmoRemove      = 512
  72. CONST cmoOverwrite   = 1024
  73. CONST cmoAppend      = 2048
  74. CONST cmoPrepend     = 4096
  75. CONST cmoNone        = 0
  76. CONST cmoAll         = 65535
  77.  
  78.  
  79. ''File Exist Modes
  80.  
  81. CONST femExists     = 0
  82. CONST femRead       = 1
  83. CONST femWrite      = 2
  84. CONST femReadWrite  = 3
  85.  
  86.  
  87. ''Read-Only Return Code
  88.  
  89. CONST ynrcNo         = 0
  90. CONST ynrcYes        = 1
  91. CONST ynrcErr1       = 2
  92. CONST ynrcErr2       = 3
  93. CONST ynrcErr3       = 4
  94. CONST ynrcErr4       = 5
  95. CONST ynrcErr5       = 6
  96. CONST ynrcErr6       = 7
  97. CONST ynrcErr7       = 8
  98. CONST ynrcErr8       = 9
  99. CONST ynrcErr9       = 10
  100.  
  101.  
  102. ''General Return Codes
  103.  
  104. CONST grcOkay       = 0
  105. CONST grcNotOkay    = 1
  106. CONST grcUserQuit   = 48
  107.  
  108.  
  109. ''Ranges
  110.  
  111. ''CONST cbSymValMax = 8192
  112. CONST cbSymValMax = 512
  113.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  114.     '' but we get Out of String Space wattdrvr error if we alloc
  115.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  116.     '' We should look into using dynamic far alloc instead of
  117.     '' STRING$ for large buffers.
  118.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  119.  
  120.  
  121. ''ON ERROR Error Codes
  122. CONST STFERR      = 1024   ''setup system error
  123. CONST STFQUIT     = 1025   ''user quit
  124.  
  125. CONST scmOff      = 0
  126. CONST scmOnIgnore = 1
  127. CONST scmOnFatal  = 2
  128.  
  129.  
  130. '**************************************************************************
  131. '********************************  Setup API's  ***************************
  132. '**************************************************************************
  133.  
  134. '' common
  135.  
  136. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  137. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  138. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  139. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  140. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  141. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  142. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  143. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  144. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  145. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  146. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  152. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  153. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  154. DECLARE FUNCTION FFindINIKeyAndVal LIB "mscuistf.dll" (szFile$, szSection$, szValueToFind$) AS INTEGER
  155. DECLARE FUNCTION IsOSNT LIB "mscuistf.dll" () AS INTEGER
  156. DECLARE FUNCTION RemoveTheDir LIB "mscuistf.dll" (szDir$) AS INTEGER
  157.  
  158. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  159. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  160. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  161. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  162. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  163. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  164. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  165. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  166. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  167. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  168.  
  169.  
  170. ''shell
  171.  
  172. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  173. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  174. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  175.  
  176.  
  177.  
  178. ''install
  179.  
  180. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  181. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  183. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  184. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  185. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  186. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  187. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  188. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  189. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  190. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  191. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  192. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  193. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  194. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  195. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  196. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  197. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  198. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  199. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  200. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  201. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  202. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  203. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  204. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  205. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  206. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  207. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  208. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  209. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  210. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  211. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  212. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  213. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  214. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  215. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  216. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  217.  
  218. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  219.  
  220.  
  221.  
  222. '*************************************************************************
  223. '****************  Setup Basic Wrapper Declarations  *********************
  224. '*************************************************************************
  225.  
  226.  
  227. ''shell
  228.  
  229. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  230. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  231. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  232. DECLARE SUB UIPop (n%)
  233. DECLARE SUB UIPopAll
  234. DECLARE SUB SetTitle (sz$)
  235. DECLARE SUB ReadInfFile (szFile$)
  236. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  237. DECLARE SUB RemoveSymbol (szSym$)
  238. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  239. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  240. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  241. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  242. DECLARE SUB AddListItem(szSymbol$, szItem$)
  243. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  244.  
  245. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  246. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  247.  
  248. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  249. DECLARE SUB RestoreCursor (hPrev%)
  250.  
  251. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  252. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  253.  
  254. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  255. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  256. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  257. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  258.  
  259. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  260. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  261. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  262. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  263.  
  264.  
  265. ''install
  266.  
  267.  
  268. DECLARE SUB CreateDir (szDir$, cmo%)
  269. DECLARE SUB RemoveDir (szDir$, cmo%)
  270. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  271. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  272. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  273. DECLARE SUB CopyFilesInCopyList
  274. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  275. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  276. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  277. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  278. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  279. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  280. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  281. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  282. DECLARE SUB DumpCopyList (szFile$)
  283. DECLARE SUB ClearCopyList
  284. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  285. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  286. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  287. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  288. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  289. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  290. DECLARE SUB InitInstall
  291. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  292. DECLARE SUB AddBlankToBillboardList (lTicks&)
  293. DECLARE SUB ClearBillboardList
  294. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  295. DECLARE SUB CloseLogFile
  296. DECLARE SUB WriteToLogFile (szStr$)
  297. DECLARE SUB SetCopyGaugePosition (x%, y%)
  298. DECLARE SUB SetRestartDir(szDir$)
  299. DECLARE FUNCTION RestartListEmpty AS INTEGER
  300. DECLARE FUNCTION ExitExecRestart AS INTEGER
  301. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  302. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  303. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  304. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  305. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  306.  
  307.  
  308. '' Error Handling
  309.  
  310. '$ifdef DEBUG
  311.  
  312. '' Setup API Errors
  313. CONST saeFail   = 0
  314. CONST saeInit   = 1
  315. CONST saeNYI    = 3
  316. CONST saeArg    = 4    ''must be max sae value
  317.  
  318. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  319. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  320.  
  321. '' chk arg
  322. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  323. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  324. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  325. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  326.  
  327. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  328. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  329.  
  330. '$endif ''DEBUG
  331.  
  332.  
  333.  
  334. '' Windows system detect
  335.  
  336. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  337. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  338. DECLARE FUNCTION GetWindowsMode AS INTEGER
  339. DECLARE FUNCTION GetWindowsDir  AS STRING
  340. DECLARE FUNCTION GetWindowsSysDir AS STRING
  341. DECLARE FUNCTION IsWindowsShared AS INTEGER
  342. DECLARE FUNCTION GetScreenWidth AS INTEGER
  343. DECLARE FUNCTION GetScreenHeight AS INTEGER
  344.  
  345.  
  346. '*************************************************************************
  347. '*****************  Setup Basic Wrapper Definitions  *********************
  348. '*************************************************************************
  349. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  350.     fFrameInit = 0
  351.     fInstallInit = 0
  352.  
  353.     IF hSetup > 0 THEN
  354. '$ifdef DEBUG
  355.         StfApiErr saeInit, "InitSetup", szCmdLine$
  356. '$endif ''DEBUG
  357.     END IF
  358.  
  359.     i% = InitFrame(szCmdLine$)
  360.     fFrameInit = 1
  361.  
  362.     InitInstall
  363.     fInstallInit = 1
  364.  
  365.     InitSetup = i%
  366. END FUNCTION
  367.  
  368.  
  369.  
  370. '**************************************************************************
  371. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  372.     IF hSetup > 0 THEN
  373. '$ifdef DEBUG
  374.         StfApiErr saeInit, "InitFrame", szCmdLine$
  375. '$endif ''DEBUG
  376.     ELSE
  377.         i% = InitializeFrame(szCmdLine$)
  378.         IF i% = -1 THEN
  379.             END   '' NOT an error - Usage (/?) or Command line copy operation
  380.         ELSEIF i% = 0 THEN
  381. '$ifdef DEBUG
  382.             StfApiErr saeFail, "InitFrame", szCmdLine$
  383. '$endif ''DEBUG
  384.             END
  385.         ELSE
  386.             InitFrame = i%
  387.         END IF
  388.     END IF
  389. END FUNCTION
  390.  
  391.  
  392. '**************************************************************************
  393. SUB SetBitmap(szDll$, Bitmap%) STATIC
  394.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  395. '$ifdef DEBUG
  396.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  397. '$endif ''DEBUG
  398.         ERROR STFERR
  399.     END IF
  400. END SUB
  401.  
  402.  
  403. '**************************************************************************
  404. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  405.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  406. '$ifdef DEBUG
  407.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  408. '$endif ''DEBUG
  409.         ERROR STFERR
  410.     END IF
  411. END SUB
  412.  
  413.  
  414. '*************************************************************************
  415. SUB SetTitle(sz$) STATIC
  416.     SetWindowText HwndFrame(), sz$
  417. END SUB
  418.  
  419.  
  420. '*************************************************************************
  421. SUB ReadInfFile (szFile$) STATIC
  422. '$ifdef DEBUG
  423.     if FValidFATPath(szFile$) = 0 then
  424.         BadArgErr 1, "ReadInfFile", szFile$
  425.     end if
  426.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  427.         StfApiErr saeFail, "ReadInfFile", szFile$
  428. '$else  ''!DEBUG
  429.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  430. '$endif ''!DEBUG
  431.         ERROR STFERR
  432.     END IF
  433. END SUB
  434.  
  435.  
  436. '*************************************************************************
  437. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  438. '$ifdef DEBUG
  439.     if szDll$ = "" then
  440.         n% = 1
  441.     elseif szDlgProc$ = "" then
  442.         n% = 3
  443.     else
  444.         n% = 0
  445.     end if
  446.     if n% > 0 then
  447.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  448.     end if
  449. '$endif ''DEBUG
  450.  
  451.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  452. '$ifdef DEBUG
  453.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  454. '$endif ''DEBUG
  455.         ERROR STFERR
  456.     ELSE
  457.         UIStartDlg = GetSymbolValue("DLGEVENT")
  458.     END IF
  459. END FUNCTION
  460.  
  461.  
  462. '*************************************************************************
  463. SUB UIPop (n%) STATIC
  464.     IF FKillNDialogs(n%) = 0 THEN
  465. '$ifdef DEBUG
  466.         StfApiErr saeFail, "UIPop", STR$(n%)
  467. '$endif ''DEBUG
  468.         ERROR STFERR
  469.     END IF
  470. END SUB
  471.  
  472.  
  473. '*************************************************************************
  474. SUB UIPopAll STATIC
  475.     IF FKillNDialogs(65535) = 0 THEN
  476. '$ifdef DEBUG
  477.         StfApiErr saeFail, "UIPopAll", ""
  478. '$endif ''DEBUG
  479.         ERROR STFERR
  480.     END IF
  481. END SUB
  482.  
  483.  
  484. '*************************************************************************
  485. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  486. '$ifdef DEBUG
  487.     if szSymbol$ = "" then
  488.         BadArgErr 1, "GetSymbolValue", szSymbol$
  489.     end if
  490. '$endif ''DEBUG
  491.     szValue$ = string$(cbSymValMax,32)
  492.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  493.     GetSymbolValue = szValue$
  494.     IF Length% >= cbSymValMax THEN
  495.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  496.         ERROR STFERR
  497.     END IF
  498.     IF szSymbol$ = "" THEN
  499.         ERROR STFERR
  500.     END IF
  501.     szValue$ = ""
  502. END FUNCTION
  503.  
  504.  
  505. '*************************************************************************
  506. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  507. '$ifdef DEBUG
  508.     if szSymbol$ = "" then
  509.         BadArgErr 1, "GetListLength", szSymbol$
  510.     end if
  511. '$endif ''DEBUG
  512.     GetListLength = UsGetListLength(szSymbol$)
  513.     IF szSymbol$ = "" THEN
  514.         ERROR STFERR
  515.     END IF
  516. END FUNCTION
  517.  
  518.  
  519. '*************************************************************************
  520. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  521. '$ifdef DEBUG
  522.     if szListSymbol$ = "" then
  523.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  524.     end if
  525.  
  526.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  527.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  528.     end if
  529. '$endif ''DEBUG
  530.  
  531.     szListItem$ = string$(cbSymValMax,32)
  532.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  533.     GetListItem = szListItem$
  534.     IF Length% >= cbSymValMax THEN
  535.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  536.         ERROR STFERR
  537.     END IF
  538.     IF szListSymbol$ = "" THEN
  539.         ERROR STFERR
  540.     END IF
  541.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  542.         ERROR STFERR
  543.     end if
  544.     szListItem$ = ""
  545. END FUNCTION
  546.  
  547.  
  548. '*************************************************************************
  549. SUB AddListItem(szSymbol$, szItem$) STATIC
  550. '$ifdef DEBUG
  551.     if szSymbol$ = "" then
  552.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  553.     end if
  554. '$endif ''DEBUG
  555.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  556. '$ifdef DEBUG
  557.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  558. '$endif ''DEBUG
  559.         ERROR STFERR
  560.     END IF
  561. END SUB
  562.  
  563.  
  564. '*************************************************************************
  565. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  566. '$ifdef DEBUG
  567.     if szSymbol$ = "" then
  568.         nArg% = 1
  569.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  570.         nArg% = 2
  571.     else
  572.         nArg% = 0
  573.     end if
  574.     if nArg% > 0 then
  575.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  576.     end if
  577. '$endif ''DEBUG
  578.  
  579.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  580. '$ifdef DEBUG
  581.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  582. '$endif ''DEBUG
  583.         ERROR STFERR
  584.     END IF
  585. END SUB
  586.  
  587.  
  588. '**************************************************************************
  589. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  590. '$ifdef DEBUG
  591.     if szSymbol$ = "" then
  592.         n% = 1
  593.     elseif FValidInfSect(szSect$) = 0 then
  594.         n% = 2
  595.     else
  596.         n% = 0
  597.     end if
  598.     if n% > 0 then
  599.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  600.     end if
  601. '$endif ''DEBUG
  602.  
  603.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  604. '$ifdef DEBUG
  605.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  606. '$endif ''DEBUG
  607.         ERROR STFERR
  608.     END IF
  609. END SUB
  610.  
  611.  
  612. '*************************************************************************
  613. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  614. '$ifdef DEBUG
  615.     if szSymbol$ = "" then
  616.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  617.     end if
  618. '$endif ''DEBUG
  619.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  620. '$ifdef DEBUG
  621.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  622. '$endif ''DEBUG
  623.         ERROR STFERR
  624.     END IF
  625. END SUB
  626.  
  627.  
  628. '*************************************************************************
  629. SUB RemoveSymbol(szSym$) STATIC
  630. '$ifdef DEBUG
  631.     if szSym$ = "" then
  632.         BadArgErr 1, "RemoveSymbol", szSym$
  633.     end if
  634. '$endif ''DEBUG
  635.     IF FRemoveSymbol(szSym$) = 0 THEN
  636. '$ifdef DEBUG
  637.         StfApiErr saeFail, "RemoveSymbol", szSym$
  638. '$endif ''DEBUG
  639.         ERROR STFERR
  640.     END IF
  641. END SUB
  642.  
  643.  
  644. '*************************************************************************
  645. FUNCTION ShowWaitCursor STATIC AS INTEGER
  646.     ShowWaitCursor = HShowWaitCursor
  647. END FUNCTION
  648.  
  649.  
  650. '*************************************************************************
  651. SUB RestoreCursor (hPrev%) STATIC
  652.     i% = FRestoreCursor(hPrev%)
  653.     IF i% = 0 THEN
  654. '$ifdef DEBUG
  655.         StfApiErr saeFail, "RestoreCursor", ""
  656. '$endif ''DEBUG
  657.         ERROR STFERR
  658.     END IF
  659. END SUB
  660.  
  661.  
  662. '*************************************************************************
  663. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  664.     SetBeepingMode = FSetBeepingMode(mode%)
  665. END FUNCTION
  666.  
  667.  
  668. '*************************************************************************
  669. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  670.     SetSilentMode = FSetSilent(mode%)
  671. END FUNCTION
  672.  
  673.  
  674. '*************************************************************************
  675. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  676. '$ifdef DEBUG
  677.     if FValidInfSect(szSect$) = 0 then
  678.         n% = 1
  679.     elseif szKey$ = "" then
  680.         n% = 2
  681.     else
  682.         n% = 0
  683.     end if
  684.     if n% > 0 then
  685.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  686.     end if
  687. '$endif ''DEBUG
  688.  
  689.     szBuf$ = string$(128, 32)
  690.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  691.     IF Length% >= 128 THEN
  692.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  693.         ERROR STFERR
  694.     END IF
  695.  
  696.     IF Length% = -1 THEN
  697. '$ifdef DEBUG
  698.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  699. '$endif ''DEBUG
  700.         ERROR STFERR
  701.     END IF
  702.  
  703.     GetSectionKeyDate = szBuf$
  704.     szBuf$ = ""
  705. END FUNCTION
  706.  
  707.  
  708. '*************************************************************************
  709. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  710. '$ifdef DEBUG
  711.     if FValidInfSect(szSect$) = 0 then
  712.         n% = 1
  713.     elseif szKey$ = "" then
  714.         n% = 2
  715.     else
  716.         n% = 0
  717.     end if
  718.     if n% > 0 then
  719.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  720.     end if
  721. '$endif ''DEBUG
  722.  
  723.     szBuf$ = string$(128, 32)
  724.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  725.     IF Length% >= 128 THEN
  726.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  727.         ERROR STFERR
  728.     END IF
  729.  
  730.     IF Length% = -1 THEN
  731. '$ifdef DEBUG
  732.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  733. '$endif ''DEBUG
  734.         ERROR STFERR
  735.     END IF
  736.  
  737.     GetSectionKeyFilename = szBuf$
  738.     szBuf$ = ""
  739. END FUNCTION
  740.  
  741.  
  742. '*************************************************************************
  743. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  744. '$ifdef DEBUG
  745.     if FValidInfSect(szSect$) = 0 then
  746.         n% = 1
  747.     elseif szKey$ = "" then
  748.         n% = 2
  749.     else
  750.         n% = 0
  751.     end if
  752.     if n% > 0 then
  753.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  754.     end if
  755. '$endif ''DEBUG
  756.  
  757.     szBuf$ = string$(128, 32)
  758.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  759.     IF Length% >= 128 THEN
  760.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  761.         ERROR STFERR
  762.     END IF
  763.  
  764.     IF Length% = -1 THEN
  765. '$ifdef DEBUG
  766.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  767. '$endif ''DEBUG
  768.         ERROR STFERR
  769.     END IF
  770.  
  771.     GetSectionKeySize = VAL(szBuf$)
  772.     szBuf$ = ""
  773. END FUNCTION
  774.  
  775.  
  776. '*************************************************************************
  777. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  778. '$ifdef DEBUG
  779.     if FValidInfSect(szSect$) = 0 then
  780.         n% = 1
  781.     elseif szKey$ = "" then
  782.         n% = 2
  783.     else
  784.         n% = 0
  785.     end if
  786.     if n% > 0 then
  787.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  788.     end if
  789. '$endif ''DEBUG
  790.  
  791.     szBuf$ = string$(128, 32)
  792.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  793.     IF Length% >= 128 THEN
  794.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  795.         ERROR STFERR
  796.     END IF
  797.  
  798.     IF Length% = -1 THEN
  799. '$ifdef DEBUG
  800.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  801. '$endif ''DEBUG
  802.         ERROR STFERR
  803.     END IF
  804.  
  805.     GetSectionKeyVersion = szBuf$
  806.     szBuf$ = ""
  807. END FUNCTION
  808.  
  809.  
  810. '*************************************************************************
  811. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  812. '$ifdef DEBUG
  813.     if szSym$ = "" then
  814.         n% = 1
  815.     elseif FValidInfSect(szSect$) = 0 then
  816.         n% = 2
  817.     else
  818.         n% = 0
  819.     end if
  820.     if n% > 0 then
  821.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  822.     end if
  823. '$endif ''DEBUG
  824.  
  825.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  826. '$ifdef DEBUG
  827.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  828. '$endif ''DEBUG
  829.         ERROR STFERR
  830.     END IF
  831. END SUB
  832.  
  833.  
  834. '*************************************************************************
  835. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  836. '$ifdef DEBUG
  837.     if szSym$ = "" then
  838.         n% = 1
  839.     elseif FValidInfSect(szSect$) = 0 then
  840.         n% = 2
  841.     else
  842.         n% = 0
  843.     end if
  844.     if n% > 0 then
  845.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  846.     end if
  847. '$endif ''DEBUG
  848.  
  849.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  850. '$ifdef DEBUG
  851.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  852. '$endif ''DEBUG
  853.         ERROR STFERR
  854.     END IF
  855. END SUB
  856.  
  857.  
  858. '*************************************************************************
  859. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  860. '$ifdef DEBUG
  861.     if szSym$ = "" then
  862.         n% = 1
  863.     elseif FValidInfSect(szSect$) = 0 then
  864.         n% = 2
  865.     else
  866.         n% = 0
  867.     end if
  868.     if n% > 0 then
  869.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  870.     end if
  871. '$endif ''DEBUG
  872.  
  873.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  874. '$ifdef DEBUG
  875.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  876. '$endif ''DEBUG
  877.         ERROR STFERR
  878.     END IF
  879. END SUB
  880.  
  881.  
  882. '*************************************************************************
  883. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  884. '$ifdef DEBUG
  885.     if szSym$ = "" then
  886.         n% = 1
  887.     elseif FValidInfSect(szSect$) = 0 then
  888.         n% = 2
  889.     else
  890.         n% = 0
  891.     end if
  892.     if n% > 0 then
  893.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  894.     end if
  895. '$endif ''DEBUG
  896.  
  897.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  898. '$ifdef DEBUG
  899.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  900. '$endif ''DEBUG
  901.         ERROR STFERR
  902.     END IF
  903. END SUB
  904.  
  905.  
  906. '*************************************************************************
  907. SUB InitInstall STATIC
  908.     IF hSetup > 0 THEN
  909. '$ifdef DEBUG
  910.         StfApiErr saeInit, "InitInstall", ""
  911. '$endif ''DEBUG
  912.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  913. '$ifdef DEBUG
  914.         StfApiErr saeFail, "InitInstall", ""
  915. '$endif ''DEBUG
  916.         END
  917.     END IF
  918. END SUB
  919.  
  920.  
  921. '*************************************************************************
  922. SUB CreateDir (szDir$, cmo%) STATIC
  923. '$ifdef DEBUG
  924.     if FValidFATDir(szDir$) = 0 then
  925.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  926.     end if
  927. '$endif ''DEBUG
  928.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  929. '$ifdef DEBUG
  930.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  931. '$endif ''DEBUG
  932.         ERROR STFERR
  933.     END IF
  934. END SUB
  935.  
  936.  
  937. '*************************************************************************
  938. SUB RemoveDir (szDir$, cmo%) STATIC
  939. '$ifdef DEBUG
  940.     if FValidFATDir(szDir$) = 0 then
  941.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  942.     end if
  943. '$endif ''DEBUG
  944.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  945. '$ifdef DEBUG
  946.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  947. '$endif ''DEBUG
  948.         ERROR STFERR
  949.     END IF
  950. END SUB
  951.  
  952.  
  953.  
  954. '*************************************************************************
  955. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  956. '$ifdef DEBUG
  957.     if FValidIniFile(szFile$) = 0 then
  958.         n% = 1
  959.     elseif FValidInfSect(szSect$) = 0 then
  960.         n% = 2
  961.     else
  962.         n% = 0
  963.     end if
  964.     if n% > 0 then
  965.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  966.     end if
  967. '$endif ''DEBUG
  968.  
  969.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  970. '$ifdef DEBUG
  971.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  972. '$endif ''DEBUG
  973.         ERROR STFERR
  974.     END IF
  975. END SUB
  976.  
  977.  
  978. '*************************************************************************
  979. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  980. '$ifdef DEBUG
  981.     if FValidIniFile(szFile$) = 0 then
  982.         n% = 1
  983.     elseif FValidInfSect(szSect$) = 0 then
  984.         n% = 2
  985.     else
  986.         n% = 0
  987.     end if
  988.     if n% > 0 then
  989.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  990.     end if
  991. '$endif ''DEBUG
  992.  
  993.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  994. '$ifdef DEBUG
  995.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  996. '$endif ''DEBUG
  997.         ERROR STFERR
  998.     END IF
  999. END SUB
  1000.  
  1001.  
  1002. '*************************************************************************
  1003. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  1004. '$ifdef DEBUG
  1005.     if FValidIniFile(szFile$) = 0 then
  1006.         n% = 1
  1007.     elseif FValidInfSect(szSect$) = 0 then
  1008.         n% = 2
  1009.     elseif szKey$ = "" then
  1010.         n% = 3
  1011.     else
  1012.         n% = 0
  1013.     end if
  1014.     if n% > 0 then
  1015.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1016.     end if
  1017. '$endif ''DEBUG
  1018.  
  1019.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1020. '$ifdef DEBUG
  1021.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1022. '$endif ''DEBUG
  1023.         ERROR STFERR
  1024.     END IF
  1025. END SUB
  1026.  
  1027.  
  1028. '*************************************************************************
  1029. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1030. '$ifdef DEBUG
  1031.     if FValidFATPath(szFile$) = 0 then
  1032.         n% = 1
  1033.     elseif FValidInfSect(szSect$) = 0 then
  1034.         n% = 2
  1035.     elseif szKey$ = "" then
  1036.         n% = 3
  1037.     else
  1038.         n% = 0
  1039.     end if
  1040.     if n% > 0 then
  1041.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1042.     end if
  1043. '$endif ''DEBUG
  1044.  
  1045.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1046. '$ifdef DEBUG
  1047.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1048. '$endif ''DEBUG
  1049.         ERROR STFERR
  1050.     END IF
  1051. END SUB
  1052.  
  1053.  
  1054. '*************************************************************************
  1055. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1056. '$ifdef DEBUG
  1057.     if szGroup$ = "" or len(szGroup$) > 24 then
  1058.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1059.     end if
  1060. '$endif ''DEBUG
  1061.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1062. '$ifdef DEBUG
  1063.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1064. '$endif ''DEBUG
  1065.         ERROR STFERR
  1066.     END IF
  1067. END SUB
  1068.  
  1069.  
  1070. '*************************************************************************
  1071. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1072. '$ifdef DEBUG
  1073.     if szGroup$ = "" or len(szGroup$) > 24 then
  1074.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1075.     end if
  1076. '$endif ''DEBUG
  1077.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1078. '$ifdef DEBUG
  1079.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1080. '$endif ''DEBUG
  1081.         ERROR STFERR
  1082.     END IF
  1083. END SUB
  1084.  
  1085.  
  1086. '*************************************************************************
  1087. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1088. '$ifdef DEBUG
  1089.     if FValidInfSect(szSect$) = 0 then
  1090.         n% = 1
  1091.     elseif szKey$ = "" then
  1092.         n% = 2
  1093.     elseif FValidFATDir(szDst$) = 0 then
  1094.         n% = 3
  1095.     else
  1096.         n% = 0
  1097.     end if
  1098.     if n% > 0 then
  1099.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1100.     end if
  1101. '$endif ''DEBUG
  1102.  
  1103.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1104. '$ifdef DEBUG
  1105.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1106. '$endif ''DEBUG
  1107.         ERROR STFERR
  1108.     END IF
  1109. END SUB
  1110.  
  1111.  
  1112. '*************************************************************************
  1113. SUB DumpCopyList (szFile$) STATIC
  1114. '$ifdef DEBUG
  1115.     if szFile$ = "" then
  1116.         BadArgErr 1, "DumpCopyList", szFile$
  1117.     end if
  1118. '$endif ''DEBUG
  1119.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1120. '$ifdef DEBUG
  1121.         StfApiErr saeFail, "DumpCopyList", szFile$
  1122. '$endif ''DEBUG
  1123.         ERROR STFERR
  1124.     END IF
  1125. END SUB
  1126.  
  1127.  
  1128. '*************************************************************************
  1129. SUB ClearCopyList STATIC
  1130.     ResetCopyList
  1131. END SUB
  1132.  
  1133.  
  1134. '*************************************************************************
  1135. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1136.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1137.     IF lNeed& < 0 THEN
  1138. '$ifdef DEBUG
  1139.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1140. '$endif ''DEBUG
  1141.         ERROR STFERR
  1142.     END IF
  1143.     GetCopyListCost = lNeed&
  1144. END FUNCTION
  1145.  
  1146.  
  1147. '*************************************************************************
  1148. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1149.     szItemNew$ = szItem$
  1150.     IF szOther$ <> "" THEN
  1151.         szItemNew$ = szItem$ + "," + szOther$
  1152.     END IF
  1153. '$ifdef DEBUG
  1154.     if szGroup$ = "" or len(szGroup$) > 24 then
  1155.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1156.     end if
  1157. '$endif ''DEBUG
  1158.  
  1159.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1160. '$ifdef DEBUG
  1161.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1162. '$endif ''DEBUG
  1163.         ERROR STFERR
  1164.     END IF
  1165.     szItemNew$ = ""
  1166. END SUB
  1167.  
  1168.  
  1169. '*************************************************************************
  1170. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1171. '$ifdef DEBUG
  1172.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1173.         n% = 1
  1174.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1175.         n% = 1
  1176.     elseif szProgHelp$ = "" then
  1177.         n% = 2
  1178.     else
  1179.         n% = 0
  1180.     end if
  1181.     if n% > 0 then
  1182.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1183.     end if
  1184. '$endif ''DEBUG
  1185.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1186. '$ifdef DEBUG
  1187.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1188. '$endif ''DEBUG
  1189.         ERROR STFERR
  1190.     END IF
  1191. END SUB
  1192.  
  1193.  
  1194. '*************************************************************************
  1195. SUB CopyFilesInCopyList STATIC
  1196.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1197.  
  1198.     IF grc% = grcUserQuit THEN
  1199.         ERROR STFQUIT
  1200.     ELSEIF grc% > 0 THEN
  1201. '$ifdef DEBUG
  1202.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1203. '$endif ''DEBUG
  1204.         ERROR STFERR
  1205.     END IF
  1206. END SUB
  1207.  
  1208.  
  1209. '*************************************************************************
  1210. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1211. '$ifdef DEBUG
  1212.     if FValidFATPath(szFullPathSrc$) = 0 then
  1213.         n% = 1
  1214.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1215.         n% = 2
  1216.     else
  1217.         n% = 0
  1218.     end if
  1219.     if n% > 0 then
  1220.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1221.     end if
  1222. '$endif ''DEBUG
  1223.  
  1224.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1225. '$ifdef DEBUG
  1226.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1227. '$endif ''DEBUG
  1228.         ERROR STFERR
  1229.     END IF
  1230. END SUB
  1231.  
  1232.  
  1233.  
  1234. '*************************************************************************
  1235. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1236. '$ifdef DEBUG
  1237.     if FValidFATPath(szFullPathSrc$) = 0 then
  1238.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1239.     end if
  1240. '$endif ''DEBUG
  1241.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1242. '$ifdef DEBUG
  1243.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1244. '$endif ''DEBUG
  1245.         ERROR STFERR
  1246.     END IF
  1247. END SUB
  1248.  
  1249.  
  1250. '*************************************************************************
  1251. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1252. '$ifdef DEBUG
  1253.     if FValidFATPath(szFullPath$) = 0 then
  1254.         n% = 1
  1255.     elseif szBackup$ = "" then
  1256.         n% = 2
  1257.     else
  1258.         n% = 0
  1259.     end if
  1260.     if n% > 0 then
  1261.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1262.     end if
  1263. '$endif ''DEBUG
  1264.  
  1265.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1266. '$ifdef DEBUG
  1267.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1268. '$endif ''DEBUG
  1269.         ERROR STFERR
  1270.     END IF
  1271. END SUB
  1272.  
  1273.  
  1274. '*************************************************************************
  1275. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1276. '$ifdef DEBUG
  1277.     if FValidFATPath(szFullPath$) = 0 then
  1278.         n% = 1
  1279.     elseif szBackup$ = "" then
  1280.         n% = 2
  1281.     else
  1282.         n% = 0
  1283.     end if
  1284.     if n% > 0 then
  1285.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1286.     end if
  1287. '$endif ''DEBUG
  1288.  
  1289.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1290. '$ifdef DEBUG
  1291.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1292. '$endif ''DEBUG
  1293.         ERROR STFERR
  1294.     END IF
  1295. END SUB
  1296.  
  1297.  
  1298. '*************************************************************************
  1299. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1300. '$ifdef DEBUG
  1301.     if FValidInfSect(szSect$) = 0 then
  1302.         n% = 1
  1303.     elseif FValidFATDir(szSrc$) = 0 then
  1304.         n% = 2
  1305.     elseif FValidFATDir(szDest$) = 0 then
  1306.         n% = 3
  1307.     else
  1308.         n% = 0
  1309.     end if
  1310.     if n% > 0 then
  1311.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1312.     end if
  1313. '$endif ''DEBUG
  1314.  
  1315.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1316. '$ifdef DEBUG
  1317.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1318. '$endif ''DEBUG
  1319.         ERROR STFERR
  1320.     END IF
  1321. END SUB
  1322.  
  1323.  
  1324. '*************************************************************************
  1325. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1326. '$ifdef DEBUG
  1327.     if FValidInfSect(szSect$) = 0 then
  1328.         n% = 1
  1329.     elseif szKey$ = "" then
  1330.         n% = 2
  1331.     elseif FValidFATDir(szSrc$) = 0 then
  1332.         n% = 3
  1333.     elseif FValidFATDir(szDest$) = 0 then
  1334.         n% = 4
  1335.     else
  1336.         n% = 0
  1337.     end if
  1338.     if n% > 0 then
  1339.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1340.     end if
  1341. '$endif ''DEBUG
  1342.  
  1343.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1344. '$ifdef DEBUG
  1345.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1346. '$endif ''DEBUG
  1347.         ERROR STFERR
  1348.     END IF
  1349. END SUB
  1350.  
  1351.  
  1352. '*************************************************************************
  1353. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1354. '$ifdef DEBUG
  1355.     if FValidInfSect(szSect$) = 0 then
  1356.         n% = 1
  1357.     elseif szKey$ = "" then
  1358.         n% = 2
  1359.     elseif FValidFATDir(szSrc$) = 0 then
  1360.         n% = 3
  1361.     elseif FValidFATPath(szDest$) = 0 then
  1362.         n% = 4
  1363.     else
  1364.         n% = 0
  1365.     end if
  1366.     if n% > 0 then
  1367.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1368.     end if
  1369. '$endif ''DEBUG
  1370.  
  1371.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1372. '$ifdef DEBUG
  1373.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1374. '$endif ''DEBUG
  1375.         ERROR STFERR
  1376.     END IF
  1377. END SUB
  1378.  
  1379.  
  1380. '*************************************************************************
  1381. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1382. '$ifdef DEBUG
  1383.     if szDll$ = "" then
  1384.         n% = 1
  1385.     elseif idDlg% = 0 then
  1386.         n% = 2
  1387.     elseif szProc$ = "" then
  1388.         n% = 3
  1389.     elseif lTicks& <= 0 then
  1390.         n% = 4
  1391.     else
  1392.         n% = 0
  1393.     end if
  1394.     if n% > 0 then
  1395.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1396.     end if
  1397. '$endif ''DEBUG
  1398.  
  1399.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1400. '$ifdef DEBUG
  1401.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1402. '$endif ''DEBUG
  1403.         ERROR STFERR
  1404.     END IF
  1405. END SUB
  1406.  
  1407.  
  1408. '*************************************************************************
  1409. SUB AddBlankToBillboardList (lTicks&) STATIC
  1410. '$ifdef DEBUG
  1411.     if lTicks& <= 0 then
  1412.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1413.     end if
  1414. '$endif ''DEBUG
  1415.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1416. '$ifdef DEBUG
  1417.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1418. '$endif ''DEBUG
  1419.         ERROR STFERR
  1420.     END IF
  1421. END SUB
  1422.  
  1423.  
  1424. '*************************************************************************
  1425. SUB ClearBillboardList STATIC
  1426.     IF FClearBillboardList = 0 THEN
  1427. '$ifdef DEBUG
  1428.         StfApiErr saeFail, "ClearBillboardList", ""
  1429. '$endif ''DEBUG
  1430.         ERROR STFERR
  1431.     END IF
  1432. END SUB
  1433.  
  1434.  
  1435. '*************************************************************************
  1436. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1437. '$ifdef DEBUG
  1438.     if FValidFATPath(szFile$) = 0 then
  1439.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1440.     end if
  1441. '$endif ''DEBUG
  1442.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1443. '$ifdef DEBUG
  1444.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1445. '$endif ''DEBUG
  1446.         ERROR STFERR
  1447.     END IF
  1448. END SUB
  1449.  
  1450.  
  1451. '*************************************************************************
  1452. SUB CloseLogFile STATIC
  1453.     IF FCloseLogFile() = 0 THEN
  1454. '$ifdef DEBUG
  1455.         StfApiErr saeFail, "CloseLogFile", ""
  1456. '$endif ''DEBUG
  1457.         ERROR STFERR
  1458.     END IF
  1459. END SUB
  1460.  
  1461.  
  1462. '*************************************************************************
  1463. SUB WriteToLogFile (szStr$) STATIC
  1464.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1465. '$ifdef DEBUG
  1466.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1467. '$endif ''DEBUG
  1468.         ERROR STFERR
  1469.     END IF
  1470. END SUB
  1471.  
  1472.  
  1473. ''' -1 in either parameter will mean 'center in frame client area'
  1474. '*************************************************************************
  1475. SUB SetCopyGaugePosition (x%, y%) STATIC
  1476.     ProSetPos x%, y%
  1477. END SUB
  1478.  
  1479.  
  1480. '*************************************************************************
  1481. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1482.     szBuf$ = STRING$(512, 32)
  1483.  
  1484.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1485.     IF wRet% = 0 THEN
  1486.         FindFileUsingFileOpen = szBuf$
  1487.     ELSEIF wRet% = 1 THEN
  1488.         FindFileUsingFileOpen = ""
  1489.     ELSE
  1490. '$ifdef DEBUG
  1491.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1492. '$endif ''DEBUG
  1493.         ERROR STFERR
  1494.     END IF
  1495.  
  1496.     szBuf$ = ""
  1497. END FUNCTION
  1498.  
  1499.  
  1500. '*************************************************************************
  1501. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1502.     IsDirWritable = FIsDirWritable(szDir$)
  1503. END FUNCTION
  1504.  
  1505.  
  1506. '*************************************************************************
  1507. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1508. '$ifdef DEBUG
  1509.     if FValidFATDir(szFile$) = 0 then
  1510.         BadArgErr 1, "IsFileWritable", szFile$
  1511.     end if
  1512. '$endif ''DEBUG
  1513.     IsFileWritable = FIsFileWritable(szFile$)
  1514. END FUNCTION
  1515.  
  1516.  
  1517. '*************************************************************************
  1518. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1519.     IF iField% < 1 THEN
  1520. '$ifdef DEBUG
  1521.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1522. '$endif ''DEBUG
  1523.         ERROR STFERR
  1524.     END IF
  1525.     szStart$ = szLine$
  1526.     IF iField% <> 1 THEN
  1527.         FOR i% = 2 TO iField% STEP 1
  1528.             iNew% = INSTR(szStart$, ",")
  1529.             IF iNew% = 0 THEN
  1530.                 GetNthFieldFromIniString = ""
  1531.                 GOTO _GNFFIS_END
  1532.             END IF
  1533.             szStart$ = MID$(szStart$, (iNew% + 1))
  1534.         NEXT
  1535.     END IF
  1536.  
  1537.     iNew% = INSTR(szStart$, ",")
  1538.     IF iNew% <> 0 THEN
  1539.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1540.     END IF
  1541.  
  1542.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1543.  
  1544. _GNFFIS_END:
  1545.  
  1546. END FUNCTION
  1547.  
  1548.  
  1549. '*************************************************************************
  1550. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1551.     GetWindowsMajorVersion = GetVersion() MOD 256
  1552. END FUNCTION
  1553.  
  1554.  
  1555. '*************************************************************************
  1556. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1557.     GetWindowsMinorVersion = GetVersion() / 256
  1558. END FUNCTION
  1559.  
  1560.  
  1561. '*************************************************************************
  1562. FUNCTION GetWindowsMode STATIC AS INTEGER
  1563.     GetWindowsMode = 0
  1564.     longTmp& = GetWinFlags()
  1565.     IF longTmp& AND WF_STANDARD THEN
  1566.         GetWindowsMode = 1
  1567.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1568.         GetWindowsMode = 2
  1569.     END IF
  1570. END FUNCTION
  1571.  
  1572.  
  1573. '*************************************************************************
  1574. FUNCTION GetWindowsDir STATIC AS STRING
  1575.     szBuf$ = string$(256, 32)
  1576.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1577.  
  1578.     IF cbBuf% = 0 THEN
  1579.         GetWindowsDir = ""
  1580. '$ifdef DEBUG
  1581.         StfApiErr saeFail, "GetWindowsDir", ""
  1582. '$endif ''DEBUG
  1583.         ERROR STFERR
  1584.     ELSE
  1585.         IF cbBuf% > 255 THEN
  1586.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1587.             ERROR STFERR
  1588.         END IF
  1589.         szBuf$ = RTRIM$(szBuf$)
  1590.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1591.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1592.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1593.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1594.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1595.         END IF
  1596.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1597.             szBuf$ = szBuf$ + "\"
  1598.         END IF
  1599.         GetWindowsDir = szBuf$
  1600.     END IF
  1601.  
  1602.     szBuf$ = ""
  1603. END FUNCTION
  1604.  
  1605.  
  1606. '*************************************************************************
  1607. FUNCTION GetWindowsSysDir STATIC AS STRING
  1608.     szBuf$ = string$(256, 32)
  1609.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1610.  
  1611.     IF cbBuf% = 0 THEN
  1612. '$ifdef DEBUG
  1613.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1614. '$endif ''DEBUG
  1615.         ERROR STFERR
  1616.     ELSE
  1617.         IF cbBuf% > 255 THEN
  1618.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1619.             ERROR STFERR
  1620.         END IF
  1621.         szBuf$ = RTRIM$(szBuf$)
  1622.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1623.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1624.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1625.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1626.         END IF
  1627.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1628.             szBuf$ = szBuf$ + "\"
  1629.         END IF
  1630.         GetWindowsSysDir = szBuf$
  1631.     END IF
  1632.  
  1633.     szBuf$ = ""
  1634. END FUNCTION
  1635.  
  1636.  
  1637. '*************************************************************************
  1638. FUNCTION IsWindowsShared STATIC AS INTEGER
  1639.     szWin$ = UCASE$(GetWindowsDir())
  1640.     szSys$ = UCASE$(GetWindowsSysDir())
  1641.  
  1642.     IF len(szWin$) = 0 THEN
  1643. '$ifdef DEBUG
  1644.         StfApiErr saeFail, "IsWindowsShared", ""
  1645. '$endif ''DEBUG
  1646.         ERROR STFERR
  1647.     END IF
  1648.  
  1649.     IF len(szSys$) <= len(szWin$) THEN
  1650.         IsWindowsShared = 1
  1651.     ELSE
  1652.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1653.         IF szWin$ = szSys$ THEN
  1654.             IsWindowsShared = 0
  1655.         ELSE
  1656.             IsWindowsShared = 1
  1657.         END IF
  1658.     END IF
  1659. END FUNCTION
  1660.  
  1661.  
  1662. '*************************************************************************
  1663. FUNCTION GetScreenWidth STATIC AS INTEGER
  1664.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1665. END FUNCTION
  1666.  
  1667.  
  1668. '*************************************************************************
  1669. FUNCTION GetScreenHeight STATIC AS INTEGER
  1670.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1671. END FUNCTION
  1672.  
  1673.  
  1674. '*************************************************************************
  1675. SUB SetRestartDir (szDir$) STATIC
  1676. '$ifdef DEBUG
  1677.     if FValidFATDir(szDir$) = 0 then
  1678.         BadArgErr 1, "SetRestartDir", szDir$
  1679.     end if
  1680. '$endif ''DEBUG
  1681.     IF FSetRestartDir(szDir$) = 0 THEN
  1682. '$ifdef DEBUG
  1683.         StfApiErr saeFail, "SetRestartDir", szDir$
  1684. '$endif ''DEBUG
  1685.         ERROR STFERR
  1686.     END IF
  1687. END SUB
  1688.  
  1689.  
  1690. '*************************************************************************
  1691. FUNCTION RestartListEmpty STATIC AS INTEGER
  1692.     IF FRestartListEmpty() = 0 THEN
  1693.         RestartListEmpty = 0
  1694.     ELSE
  1695.         RestartListEmpty = 1
  1696.     END IF
  1697. END FUNCTION
  1698.  
  1699.  
  1700. '*************************************************************************
  1701. FUNCTION ExitExecRestart STATIC AS INTEGER
  1702.     ExitExecRestart = FExitExecRestart
  1703. END FUNCTION
  1704.  
  1705.  
  1706. '*************************************************************************
  1707. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1708.  
  1709. '$ifdef DEBUG
  1710.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1711.         n% = 1
  1712.     elseif FValidFATPath(szDst$) = 0 then
  1713.         n% = 2
  1714.     elseif FValidFATDir(szDir$) = 0 then
  1715.         n% = 3
  1716.     else
  1717.         n% = 0
  1718.     end if
  1719.     if n% > 0 then
  1720.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1721.     end if
  1722. '$endif ''DEBUG
  1723.  
  1724.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1725. '$ifdef DEBUG
  1726.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1727. '$endif ''DEBUG
  1728.         ERROR STFERR
  1729.     END IF
  1730. END SUB
  1731.  
  1732.  
  1733.  
  1734. '**************************************************************************
  1735. '***************************  Error Handlers  *****************************
  1736. '**************************************************************************
  1737.  
  1738.  
  1739. '$ifdef DEBUG
  1740. '**************************************************************************
  1741. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1742.     select case nMsg%
  1743.         case saeFail
  1744.             lpText$ = "Failed"
  1745.         case saeInit
  1746.             lpText$ = "Already Initialized"
  1747.         case saeNYI
  1748.             lpText$ = "NYI"
  1749.         case else
  1750.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1751.     end select
  1752.  
  1753.     lpText$ = lpText$ + ": "+ szApi$
  1754.     if szArgs$ <> "" then
  1755.         lpText$ = lpText + " (" + szArgs$ + ")"
  1756.     end if
  1757.     lpCaption$ = "MS-Setup Toolkit API Error"
  1758.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1759.     print lpText$
  1760.     lpText$ = ""
  1761.     lpCaption$ = ""
  1762. END SUB
  1763.  
  1764. '**************************************************************************
  1765. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1766.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1767.     ERROR STFERR
  1768. END SUB
  1769.  
  1770.  
  1771. '** REVIEW: Move this function into common lib (we'll need it there too)
  1772. '**************************************************************************
  1773. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1774.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1775.         FValidInfSect = 0
  1776.     else
  1777.         FValidInfSect = 1
  1778.     end if
  1779. END FUNCTION
  1780.  
  1781.  
  1782. '** REVIEW: Move this function into common lib (we'll need it there too)
  1783. '**************************************************************************
  1784. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1785.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1786.         FValidIniFile = 0
  1787.     else
  1788.         FValidIniFile = 1
  1789.     end if
  1790. END FUNCTION
  1791.  
  1792. '**************************************************************************
  1793. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1794.  
  1795.     if szDrive$ = "" then
  1796.         FValidDrive = 0
  1797.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1798.         FValidDrive = 1
  1799.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1800.         FValidDrive = 0
  1801.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1802.         FValidDrive = 0
  1803.     elseif LEN(szDrive$) = 1 then
  1804.         FValidDrive = 1
  1805.     elseif INSTR(2,szDrive$,":\") = 2 then
  1806.         FValidDrive = 1
  1807.     elseif INSTR(1,szDrive$,":") = 2 then
  1808.         FValidDrive = 1
  1809.     else
  1810.         FValidDrive = 0
  1811.     end if
  1812. END FUNCTION
  1813.  
  1814. '$endif ''DEBUG
  1815.  
  1816.  
  1817. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1818.  
  1819. End Trap
  1820.  
  1821. hSetup = InitSetup(COMMAND$)
  1822.  
  1823. ON ERROR GOTO QUIT
  1824.  
  1825.